package com.attendance.util;


import org.springframework.beans.BeanUtils;

import java.util.List;
import java.util.stream.Collectors;

public class BeanCopyUtils {
    public BeanCopyUtils() {
    }

    /**
     * 拷贝单个bean
     * @param o 需要转换的对象
     * @param clazz 目标对象的字节码
     * @param <O> 需要转换对象的泛型
     * @param <T> 目标对象的泛型
     * @return 目标对象
     */
    public static <O,T> T copyBean(O o,Class<T> clazz){
        //创建目标对象
        T t = null;
        try {
             t = clazz.newInstance();
             //拷贝
            BeanUtils.copyProperties(o,t);
        }  catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

    /**
     * 拷贝bean集合
     * @param list 需要拷贝的集合对象
     * @param clazz 目标对象的字节码
     * @param <O> 需要拷贝对象的泛型
     * @param <T> 目标对象的泛型
     * @return 目标对象的集合
     */
    public static <O,T> List<T> copyBeanList(List<O> list,Class<T> clazz ){
        //转为stream流操作
        return list.stream()
                //调用单个bean拷贝的方法
                .map(o -> copyBean(o,clazz))
                //收集到list集合
                .collect(Collectors.toList());
    }
}
